
// 递归：代码复用
// 打印 nums[start...end]
function printArr(nums, start) {
    // 退出条件
    if (start > nums.length - 1) return

    // 第一步：打印 nums[start]
    console.log(nums[start])

    // 第二步：打印 nums[start + 1...end]
    printArr(nums, start + 1)
}

// 迭代：显示栈模拟递归
// 空间复杂度：O(n)
function printArrIter(nums) {
    // 定义显示栈，作用和系统栈是一样的
    const stack = [];
    // 第一次调用 printArr
    stack.push(0);

    while (stack.length > 0) {
        const start = stack.pop();
        // 退出条件
        if (start > nums.length - 1) return;
        // 第一步：打印第一个元素
        console.log(nums[start]);
        // 第二步：调用 printArr，打印 [start + 1...end]
        stack.push(start + 1);
    }
}

nums = [1, 2, 3, 4]
printArr(nums, 0)
